package peace.gui.controls {
import peace.data.Dimensions;

/**
 * Контрол кеширует свои размеры и вызывает <code>arrange()</code> при изменении
 * Поведение по умолчанию при изменении размеров удалено
 */
public class RubberSprite extends Control {
    /**
     * возможность заморозить выравнивание
     */
    public var freezeArrange:Boolean = false;

    /**
     * кеш для размеров
     */
    protected var size:Dimensions = new Dimensions();
    protected var widthChanged:Boolean = false;
    protected var heightChanged:Boolean = false;

    /**
     * virtual  <br>
     * Вызывается после реального изменения размеров
     */
    public function arrange():void {
        widthChanged = heightChanged = false;
    }

    /**
     * Возможность вызвать arrange() 1 раз
     * @param width
     * @param height
     */
    public function resize(width:Number, height:Number):void {
        widthChanged = width != size.width;
        heightChanged = height != size.height;

        if (widthChanged || heightChanged) {
            size.width = width;
            size.height = height;
            arrange();
        }
    }

    override public function set width(value:Number):void {
        if (size.width == value) return;
        widthChanged = true;

        size.width = value;
        arrange();
    }

    override public function get width():Number {
        return size.width;
    }

    override public function set height(value:Number):void {
        if (size.height == value) return;
        heightChanged = true;

        size.height = value;
        arrange();
    }

    override public function get height():Number {
        return size.height;
    }

    /**
     * @return реальный размер DisplayObject
     */
    public function get explicitWidth():Number {
        return super.width;
    }

    /**
     * @return реальный размер DisplayObject
     */
    public function get explicitHeight():Number {
        return super.height;
    }

}
}